SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


CREATE PROCEDURE [dbo].[LIQDescuentosExternos]
@Agente INT,
@Servicio INT,
@Plaza INT,
@Resultado DECIMAL(18,4) OUTPUT,
@idLiquidacion INT,
@DiasALiquidar INT,
@DiasDelPeriodo INT,
@Desde DATETIME,
@Hasta DATETIME
AS 

SET NOCOUNT ON
SET DATEFORMAT DMY

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- REGISTRO DE ACTUALIZACIONES
-- 18/11/2005 - Se agregaron parametros @Desde y @Hasta para manejo de Fechas en Titulares y Suplentes
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DECLARE @Afiliacion INT
DECLARE @Horas INT
DECLARE @Organizacion INT
DECLARE @NroError INT
DECLARE @SituacionRevista INT
DECLARE @RegimenSalarial INT
DECLARE @Documento INT
DECLARE @FechaLiquidacion DATETIME
DECLARE @MontoADescontar DECIMAL(18,4)
DECLARE @TipoLiquidacion INT
DECLARE @idRegistroLiquidacion INT
DECLARE @idDescuento INT
DECLARE @FechaVencimiento DATETIME
DECLARE @SubOrganizacion INT
DECLARE @CodigoBLP INT

SELECT @Documento = documento FROM tb_Agentes WHERE idAgente = @Agente
SELECT @FechaLiquidacion = Hasta, @TipoLiquidacion = Tipo FROM tb_Liquidaciones WHERE idLiquidacion = @idLiquidacion

SELECT @Afiliacion = idAfiliacion FROM tb_Afiliaciones WHERE idAgente = @Agente
SELECT @horas= horas, @regimensalarial = regimensalarial, @SubOrganizacion = SubOrganizacion FROM tb_Plazas WHERE idPlaza = @Plaza
SELECT @Organizacion = ubicacionOrig, @SituacionRevista = SituacionRevista FROM tb_ServiciosAgentes WHERE idservicioAgente =  @Servicio
SELECT @CodigoBLP = CodigoBLP FROM tb_Organizaciones WHERE idOrganizaciones = @Organizacion
SELECT @FechaVencimiento = FVencimiento, @idDescuento = idDescuentoBLP, @MontoADescontar = isnull(TotalCuota,0) FROM tb_DescuentosBLP WHERE @documento = documento and 
	( (Month(@FechaLiquidacion) = 12 And Month(FVencimiento)=1 And Year(@FechaLiquidacion)+1=Year(FVencimiento)) OR (Month(@FechaLiquidacion)+1=Month(FVencimiento) And Year(@FechaLiquidacion) = Year(FVencimiento)) )
	 And Convert(Int, Ente) = @CodigoBLP

if @MontoADescontar is null	
	SELECT @MontoADescontar = 0

If (SELECT OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion) Is Not Null
	SELECT @Organizacion = OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion

if not exists (SELECT * FROM tb_RegistroDeLiquidaciones WHERE liquidacion = @idLiquidacion and Agente = @Agente and concepto = 30 And MontoDescuento > 0)
Begin
	If @SituacionRevista in (3,4) And Exists(SELECT * FROM tb_ServiciosAgentes S Inner Join tb_SubServiciosAgentes SS On idServicioAgente = ServicioAgente WHERE idServicioAgente <> @Servicio And Agente = @Agente  And UbicacionOrig = @Organizacion And SituacionRevista in (1,2) And S.FechaBaja Is Null And SS.FechaBaja Is Null )
		print 'Se deja el concepto para el proximo servicio titular o INTerino'
	Else
		INSERT INTo tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, DiasLiquidados, SubOrganizacion)
		VALUES (null, @Afiliacion, @Agente, null, 1, null, 30, null, null, null, null, null, null, @horas, 0, @idLiquidacion,  @MontoADescontar, 0, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
End
Else
Begin
	INSERT INTo tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, DiasLiquidados, SubOrganizacion)
	VALUES (null, @Afiliacion, @Agente, null, 1, null, 30, null, null, null, null, null, null, @horas, 0, @idLiquidacion,  0, 0, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
End

SELECT @NroError = @@Error

SELECT @idRegistroLiquidacion = @@Identity

-- SI LA LIQUIDACION ES DEFINITIVA REGISTRA EL DESCUENTO
if @TipoLiquidacion = 4 and @FechaVencimiento is not null
	INSERT INTO tb_RelDescuentoExternoLiquidacion (idRegistroLiquidacion, idDescuento, FechaVencimiento, TotalCuota, Observaciones)
	VALUES (@idRegistroLiquidacion, @idDescuento, @FechaVencimiento, @MontoADescontar, null )

If @@Error <> 0
	SELECT @NroError = @@error

IF @NroError <> 0
  INSERT INTO tb_ErroresLiquidacion (Agente, Concepto, Diagnostico, Fecha, Liquidacion, Organizacion, Servicio, CabeceraDeLiquidacion, NumeroDeError) 
	VALUES (@Agente, 30, convert(varchar,@NroError), getdate(), @idLiquidacion, @Organizacion, @Servicio, NULL, @NroError)

GO
